General purpose graphics processing units (GPGPUs) are generalized versions of graphics processing units originally designed to process 2D and 3D graphics. GPGPUs extend the high power parallel processing of GPUs to general purpose data processing applications beyond graphics processing. As one example, a GPU may be configured to process data in accordance with the OpenCL specification that gives certain applications access to the graphics processing unit for non-graphical computing. The “OpenCL Specification, Version 1.1,” was released in June 2010 and is publicly available.
GPGPUs include programmable processing units arranged in a highly parallel structure that does not allow for data sharing or synchronization between the processing units. Instead, the individual processing units only exchange data sets with an external memory. Due to this structure, applications for GPGPUs are limited to those that are inherently parallel. GPGPU architectures may be so highly parallelized that they prevent efficient implementation of pipeline-based computations. This limitation extends to 2D and 3D graphics processing that use parallel processing at each processing stage, but require pipelining of computation resources between the stages.